package busterminal.command.scheduleditem;

import busterminal.command.AbstractCommand;
import busterminal.exception.BusinessException;
import busterminal.persistence.ScheduledItemDAO;
import busterminal.services.ServiceLocator;
import java.util.Arrays;
import java.util.List;

/**
 * Команда для удаления пункта расписания
 */
public class DeleteScheduledItemCommand extends AbstractCommand {

    /**
     * Имя параметра "Идентификатор пункта расписания"
     */
    private final static String PARAM_SCHEDULED_ITEM_ID = "scheduled item id";
    /**
     * Регулярное выражение для проверки корректности ввода числа
     */
    private static final String CORRECT_NUMBER_FORMAT = "^[1-9]([0-9]*)$";

    /**
     * Конструктор по умолчанию
     */
    public DeleteScheduledItemCommand() {
        super("Delete scheduled item");
    }

    /**
     * Получить список имён параметров
     * @return список имён параметров
     */
    @Override
    public List<String> getParametersNames() {
        return Arrays.asList(PARAM_SCHEDULED_ITEM_ID);
    }

    /**
     * Выполнить команду
     */
    @Override
    public void execute() {
        String paramScheduledItemId = parameters.get(PARAM_SCHEDULED_ITEM_ID).trim();
        if (!paramScheduledItemId.matches(CORRECT_NUMBER_FORMAT)) {
            throw new BusinessException("Incorrect scheduled item id='" + paramScheduledItemId + "'");
        }
        int scheduledItemId;
        try {
            scheduledItemId = Integer.parseInt(paramScheduledItemId);
        } catch (Exception e) {
            throw new BusinessException("Incorrect scheduled item id='" + paramScheduledItemId + "'; " + e.toString(), e);
        }

        ScheduledItemDAO scheduledItemDAO = ServiceLocator.getService(ScheduledItemDAO.class);
        scheduledItemDAO.delete(scheduledItemDAO.read(scheduledItemId));
    }
}
